Iced 转Typescript 重构顺滑过度之await/defer
先抛出答案,使用:
1 | const [err, result] = await callAsync(defer2Promise(icedScript.icedCallbackFunc, [params])) |
实现:
1 | _ = require "lodash" |
由于iced 使用await
defer
在iced1.x 、iced2.x、iced3.x中有不同实现,iced1.x 是采用编译原理直接替换await 为iced_deferrals / _iced_passed_deferral等参数,无法同Typescript 的await 和平共处。
转换方法内不方便提供await defer:因为iced 不支持参数解构!那么我们直接在函数体外提供数组对象。同时,方法最后提供柯里化函数,使用callback 形式调用。
最后,我们提供js原生支持的 apply 函数,调用起回调方法。
总结: 以上解决了Iced 重构 Typescript 过程中,无法平滑过渡的隐患(可能导致牵连多个Iced 脚本,无法在Typescript中进行 await 调用的老大难题)